package v1

import (
	"encoding/json"
	"fmt"
	"net/http"

	"github.com/gin-gonic/gin"

	bc "application/blockchain"
	"application/pkg/app"
)

type HouseManCenterRequestBody struct {
	HouseId string `json:"houseId"`
	Code    string `json:"code"`
}

// 根据房管局验证房产
func CheckHouseManCenter(c *gin.Context) {
	appG := app.Gin{C: c}
	body := new(HouseManCenterRequestBody)
	//解析Body参数
	if err := c.ShouldBind(body); err != nil {
		appG.Response(http.StatusBadRequest, "失败", fmt.Sprintf("参数出错%s", err.Error()))
		return
	}

	var bodyBytes [][]byte

	bodyBytes = append(bodyBytes, []byte(body.HouseId), []byte(body.Code))

	//调用智能合约
	resp, err := bc.ChannelQuery("checkHouse", bodyBytes)
	if err != nil {
		appG.Response(http.StatusInternalServerError, "失败", err.Error())
		return
	}
	var r interface{}
	err = json.Unmarshal(resp.Payload, &r)
	if err != nil {
		appG.Response(http.StatusInternalServerError, "json解析失败", err.Error())
		return
	}

	c.JSON(http.StatusOK, r)
}

// 房管局上链房产有效
func AddHouseManCenter(c *gin.Context) {
	appG := app.Gin{C: c}
	body := new(HouseManCenterRequestBody)
	//解析Body参数
	if err := c.ShouldBind(body); err != nil {
		appG.Response(http.StatusBadRequest, "失败", fmt.Sprintf("参数出错%s", err.Error()))
		return
	}

	// 传递参数
	var args [][]byte
	args = append(args, []byte(body.HouseId))
	args = append(args, []byte(body.Code))

	//调用智能合约
	resp, err := bc.ChannelExecute("addHouse", args)
	if err != nil {
		appG.Response(http.StatusInternalServerError, "失败", err.Error())
		return
	}

	appG.Response(http.StatusOK, "成功", resp.Payload)
}

//func (c *HouseManController) Batch() {
//
//	// 定义读取文件的key
//	var key string = "house"
//	logs.Info("receive file")
//	// auth是一个key值,需要与前端约定
//	_, header, err := c.GetFile(key)
//
//	if err != nil {
//		// 如果出错,没有读到文件 file和header都是nil
//		c.Data["json"] = &ResStruct{
//			Code: 402,
//			Data: "没有读到文件",
//		}
//		c.ServeJSON()
//	}
//
//	// 获取文件名
//	fileName := header.Filename
//	logs.Info("文件名称:", fileName)
//
//	// 关于保存文件的路径:static前不能添加/
//	err = c.SaveToFile(key, path.Join("static/upload", fileName))
//
//	if err != nil {
//		c.Data["json"] = &ResStruct{
//			Code: 503,
//			Data: "文件上传异常",
//		}
//		c.ServeJSON()
//	}
//
//	// 接收上传的文件
//	// 保存文件:将文件保存在static/upload目录下面
//	// 回复用户已经接收上传的文件
//	// 开启任务:toolbox.NewTask()
//	// 读文件
//	// 将读取的每条记录信息都写到区块中
//	var taskName string = "t1"
//
//	// 当前时间+5秒  "* * * * * *"
//	t := time.Now().Add(5 * time.Second)
//	second := t.Second()
//	minute := t.Minute()
//	hour := t.Hour()
//	spec := fmt.Sprintf("%d %d %d * * *", second, minute, hour)
//	configPath, _ := beego.AppConfig.String("credit_center_crypto_path")
//	task := toolbox.NewTask(taskName, spec, func() error {
//		logs.Info("start task")
//		// 当我们任务执行完成后,停止
//		defer toolbox.StopTask()
//		return logics.UpTask(configPath, fileName)
//	})
//	// 注意:
//	// task.Run() 立即执行
//
//	// 将任务添加到容器
//	toolbox.AddTask(taskName, task)
//	// 开启任务执行
//	toolbox.StartTask()
//
//	c.Data["json"] = &ResStruct{
//		Code: 200,
//		Data: "success",
//	}
//	c.ServeJSON()
//}
